// 手写 new
let myNew = function(constructor,...props) {

    try {
        let context = Object.create(constructor.prototype);

        let result = constructor.apply(context,props);

        return (typeof result === 'object' && result !== null) ? result : context;
    }catch(e) {

        return new constructor(...props)
    }
    

}

// 自定义构造函数
function Person(name) {
    this.name = name;
}

// test1：使用 myNew 和自定义构造函数
let obj = myNew(Person,'daxia');
console.log(obj); // {name:'daxia}

// test2：使用 myNew 和 JS 内置构造函数
console.log(myNew(Set,[1,2,2,3])); 